﻿using System;
using System.Reflection;

namespace ConsoleApp_core
{
    /// <summary>
    /// 通过反射进行创建对象
    /// </summary>
    public class ReflectionCreateInstance
    {
        public void Show()
        {
            var assembly = Assembly.Load("ConsoleApp_core");//加载dll
            Type type = assembly.GetType($"ConsoleApp_core.ReflectionCreateInstance");//从dll获取对象类型（命名空间.类型名）
            if (type == null)
                throw new Exception("type null");
            var obj = Activator.CreateInstance(type);//通过反射创建对象。对象为object
            if (obj == null)
                throw new Exception("boj null");

            //常规做法：使用接口。多个类都实现同一个接口，通过接口进行调用。
            var service = obj as ReflectionCreateInstance;//object对象 转为具体对象。
            service.ShowHi();
        }

        public void ShowHi()
        {
            Console.WriteLine("Hi!反射！");
        }
    }
}
